﻿//using OpenAI.ObjectModels;


//public class MatlabFeatureDevTeamConfig : ChatChainConfigBase
//{
//    public override TalkingOrder TalkingOrder => TalkingOrder.InitiatorThenRoundTable;
//    protected override string teamContextAwarenessHeader =>
//        "You are part of a small Matlab dev team tasked with developing features based on requirements from your client, " +
//        "to be delivered as standalone functions in Matlab code. Your team follows the Test-Driven Development (TDD) methodology. ";

//    protected override string defaultGptModel => Models.EnumToString(Models.Model.Gpt_4);


//    public override string workspaceName => "Matlab Feature Development";

//    public override Dictionary<ChatAgentEnum, AgentSetupInfo> AgentSetupInfos => new Dictionary<ChatAgentEnum, AgentSetupInfo>() {
//        {ChatAgentEnum.Client, new AgentSetupInfo()
//        {
//            agentEnum = ChatAgentEnum.Client,
//            isHuman = true,
//            agentName = "Client",
//            gptModel =  defaultGptModel,
//        }},
//        {ChatAgentEnum.TechLead, new AgentSetupInfo()
//        {
//            agentEnum = ChatAgentEnum.TechLead,
//            isHuman = false,
//            agentName = "Tech Lead",
//            gptModel = defaultGptModel,
//            cleanMemoOnNewRoom = false,
//            whatItDoes = "You are the Tech Lead of a small Matlab dev team. "
//        }},
//        {ChatAgentEnum.UnitTestEngineer, new AgentSetupInfo(){
//            agentEnum = ChatAgentEnum.UnitTestEngineer,
//            isHuman = false,
//            agentName = "Unit Test Engineer",
//            gptModel = defaultGptModel,
//            cleanMemoOnNewRoom = false,
//            whatItDoes = "You are the unit test engineer of the team, who is responsible for writing unit tests code."
//        }},
//        {ChatAgentEnum.FeatureDeveloper, new AgentSetupInfo()
//        {
//            agentEnum = ChatAgentEnum.FeatureDeveloper,
//            isHuman = false,
//            agentName = "Feature Developer",
//            gptModel = defaultGptModel,
//            cleanMemoOnNewRoom = false,
//            whatItDoes = "You are the feature developer of a small matlab dev team. "
//        }},
//        {ChatAgentEnum.ChatEndDetectionBot, new AgentSetupInfo()
//        {
//            agentEnum = ChatAgentEnum.ChatEndDetectionBot,
//            isHuman = false,
//            agentName = "Chat End Detection Bot",
//            gptModel = defaultGptModel,
//            cleanMemoOnNewRoom = true,
//            canFuncCall = false,
//            whatItDoes =
//            "Provided with the last message of the chatroom, given the context of the chatroom you are in, " +
//            "You can only respond with a number from 0.0 ~ 1.0, where your answer indicates whether the members " +
//            "in the chatroom has reached consensus as well as a conclusion. The bigger the number is, the more " +
//            "confidence you have in your answer. \r\n\r\nExamples, 1.0 is used when there is clear evidence, " +
//            "0.5 could be a middle ground where you are not sure. 0.0 could be used when there's obvious disagreement " +
//            "or ongoing discussion with no end in sight. \r\n\r\nDo not explain your answer, and do not use punctuation."
//        }},
//        {ChatAgentEnum.FunctionCallerBot, new AgentSetupInfo()
//        {
//            agentEnum = ChatAgentEnum.FunctionCallerBot,
//            isHuman = false,
//            agentName = "Function Invoker Bot",
//            gptModel = defaultGptModel,
//            cleanMemoOnNewRoom = false,
//            whatItDoes =
//            "Function invoker bot of chatRoom, you will be provided with chat history from a chat room, " +
//            "then given a list of functions so you could decide which function to be called or none to be called."
//        }}
//    };

//    public override List<ChatChainPhase> phases => new() {
//        new ChatChainPhase(){
//            phaseName = "Requirement Gathering",
//            phaseDescription = "Gathering of requirement",
//            phaseSteps = new(){
//                new ChatStep(){
//                    chatStepPurpose = "Requirement Gathering",
//                    chatRooms = new(){
//                        new ChatRoom(){
//                            meetingHost = ChatAgentEnum.Client,
//                            meetingHostInitiator = "Please provide the feature requirement that you would like the team to implement",
//                            roomName = "Requirement Gathering",
//                            roomGoal = "a place where tech lead receive requirement from client and discuss with client if there's any doubt. Until the requirement is clear. ",
//                            agentRequired = new()
//                            {
//                                new RequiredAgentInRoomInfo(){ agentEnum = ChatAgentEnum.Client,
//                                    agentGoal = "client of Matlab Dev Team. Responsible for giving out requirements and clarifying them if needed"},
//                                new RequiredAgentInRoomInfo(){ agentEnum = ChatAgentEnum.TechLead,
//                                    agentGoal = "tech lead of matlab dev team. Responsible receiving requirement from client, make sure understand " +
//                                    "the requirement and forward any questions to client until one can breakdown the requirement for the dev team. "},
//                            }
//                        }
//                    }
//                },
//            },
//        },
//        new ChatChainPhase(){
//            phaseName = "TDD Cycle",
//            phaseDescription = "TDD Cycle",
//            phaseSteps = new()
//            {
//                new ChatStep()
//                {
//                    chatStepPurpose = "Test Case Discussion",
//                    chatRooms = new()
//                    {
//                        new ChatRoom()
//                        {
//                            meetingHost = ChatAgentEnum.TechLead,
//                            meetingHostInitiator = "Explain the feature requirement to your unit test engineer",
//                            roomName = "Test Case Discussion",
//                            roomGoal = "a place where tech lead will explain the requirement to unit test engineer and unit test engineer will create test case to be later used in TDD cycle. ",
//                            agentRequired = new(){
//                                new RequiredAgentInRoomInfo(){
//                                    agentEnum = ChatAgentEnum.TechLead, agentGoal =
//                                    "Being an expert in the task area, You will make sure your test engineer understood the requirement, highlighting potential corner cases to aid in comprehensive " +
//                                    "testcase creation. After submission of testcase description, review it, suggesting improvements to the unit test engineer as needed until the test case description is satisfactory. "
//                                },
//                                new RequiredAgentInRoomInfo()
//                                {
//                                    agentEnum = ChatAgentEnum.UnitTestEngineer, agentGoal =
//                                    "Create testcases for TDD development based on the requirement given. Upon receiving requirement, ensure clarity, communcate with tech lead if needed. " +
//                                    "Then write test case description and submit it for review, and make requested improvements until approved. "
//                                }
//                            }
//                        },
//                    }
//                },
//                 new ChatStep()
//                {
//                    chatStepPurpose = "Test Case implementation",
//                    chatRooms = new()
//                    {
//                        new ChatRoom(){
//                            meetingHost = ChatAgentEnum.UnitTestEngineer,
//                            meetingHostInitiator = "Based on the testcases created, implement it in matlab code within this chat and post it in the chat for team lead to review",
//                            roomName = "Test case implementation",
//                            roomGoal = "a place where unit test engineer will implement the test cases and review it with tech lead until no more improvements needed",
//                            agentRequired = new()
//                            {
//                                new RequiredAgentInRoomInfo()
//                                {
//                                    agentEnum = ChatAgentEnum.TechLead, agentGoal =
//                                    "being an expert in the task area, he ensure the unit test engineer implement the test case code correctly. After code submission, " +
//                                    "he review the code, suggesting improvements to the unit test engineer as needed until the submitted code is satisfactory. "
//                                },
//                                new RequiredAgentInRoomInfo()
//                                {
//                                    agentEnum = ChatAgentEnum.UnitTestEngineer, agentGoal =
//                                    "Implement the test case code based on the requirement from previous discussion. " +
//                                    "Develop the matlab code directly within this chat and post the complete code here for review and make requested improvements until approved. "
//                                }
//                            }
//                        },
//                    }
//                 },
//                  new ChatStep()
//                  {
//                      chatStepPurpose = "Feature Development",
//                      chatRooms = new()
//                      {
//                        new ChatRoom()
//                        {
//                            meetingHost = ChatAgentEnum.TechLead,
//                            meetingHostInitiator = "Explain the feature requirement to your feature developer",
//                            roomName = "Feature Development",
//                            roomGoal = "a place where tech lead will explain the requirement to feature developer and feature developer will implement and provide executable matlab code. ",
//                            agentRequired = new()
//                            {
//                                new RequiredAgentInRoomInfo()
//                                {
//                                    agentEnum = ChatAgentEnum.TechLead, agentGoal =
//                                    "being an expert in the task area, he ensure the feature developer understood the requirement. " +
//                                    "After code submission, he review the code, suggesting improvements to the feature developer as needed until the submitted code is satisfactory. "
//                                },
//                                new RequiredAgentInRoomInfo()
//                                {
//                                    agentEnum = ChatAgentEnum.FeatureDeveloper, agentGoal =
//                                    "Implement the feature based on the requirement given. Upon receiving requirement, ensure clarity, communcate with tech lead if needed. " +
//                                    "Then develop the feature directly within this chat and post the complete code here for review and make requested improvements until approved. "
//                                }
//                            }
//                        },
//                    }
//                }
//            }
//        }
//    };

//    protected override string WorkPrinciple => "#### Given chat message you received, and always take into consideration in terms of other chatroom members' background:\n" +
//                "   1. Each chat request you received might composed of messages from multiple members, with indicator which message comes from whom.  \n" +
//                "   2. For each individual messages in that chat request:\n" +
//                "       a. Give detailed reply if you can provide insightful information.\n" +
//                "       b. Give less detailed reply if you can provide less insightful information in comparison with other members in the chatroom. \n" +
//                "       c. You can decide how lengthy the reply is based on how much you can contribute to this conversation or to the goal of the meeting. \n" +
//                "       d. If its just a \"[PASS]\", then you can ignore it. \n" +
//                "   3. Do not [PASS] if you are directly mentioned or instructed to do something. \n" +
//                "   4. If you are not mentioned/instructed, and you don't feel like you could contribute to this conversation or to the goal, in this case Reply with only \"[PASS]\", No explaination, no punctuation apart from [].\n" +
//                "#### When sending out chat messages:\n" +
//                "   1. Use instruct type prompting more often when you need other agents in the chatroom to assist you, instead of just thinking out loud. \n" +
//                "       E.g., Hey @Someone_In_ChatRoom, do xx for me/tell me something about xxx etc. \n" +
//                "   2. Always @ a person's name when using instruct type prompting. \n";
//}
